/**
 * @description vhMath，扩展的math函数。
 * @author huaicheng.deng
 * @example
 * import {vhMath} from 'vhall-utils'
 * this.$jxUtils.vhMath.selectFrom(10, 100) //45
 * this.$jxUtils.vhMath.isNumberValue(10, 2) // false
 * this.$jxUtils.vhMath.isNumberValue(10, 0) // true
 * this.$jxUtils.vhMath.isNumberValue(10.123, 2) // false
 * ...
 */
class JxMath {

    constructor() { }
    /**
     * @param { Number } startNumber 区间起始值（包含）
     * @param { Number } endNumber 区间末尾值（不包含）
     * @description 随机获取一个在起始值与末尾值之间的值
     * @returns {Number} 一个数值
     * @author huaicheng.deng
     * @example
     * this.$jxUtils.vhMath.selectFrom(10, 100) // 45
     */
    selectFrom(startNumber, endNumber) {
        if (typeof startNumber !== 'number' || typeof endNumber !== 'number') throw '参数startNumber，endNumber必须是number';
        var choice = endNumber - startNumber + 1;
        return Math.floor(Math.random() * choice + startNumber)
    }

    /**
     *
     * @param {*} str 被判断的值
     * @param { number } [decimal] 小数位。没有值传入时，判断是否为数值(包含整数、小数)；值为0时，判断是否是一个整数；值大于0时，判断是否是指定的小数位；
     * @description 判断一个数是否是一个（可以指定小数位）数值
     * @returns {Boolean} 是否是数值
     * @author huaicheng.deng
     * @example
     * this.$jxUtils.vhMath.isNumberValue(10, 2) // false
     * this.$jxUtils.vhMath.isNumberValue(10, 0) // true
     * this.$jxUtils.vhMath.isNumberValue(10.123, 2) // false
     */
    isNumberValue(str, decimal) {
        if (decimal === undefined || decimal === null) return Number(str) == str
        else if (decimal === 0) {
            return (new RegExp(/^[0-9]{1,}$/)).test(str)
        }
        const deg = typeof decimal === 'number' ? RegExp(`^[0-9]+[.][0-9]{${decimal}}$`, 'ig') : RegExp(`^[0-9]+[.][0-9]+$`, 'ig')
        return deg.test(str)
    }

}


export default new JxMath()